package com.tepth.remote.core.utils.storage;

import android.content.SharedPreferences;
import android.preference.PreferenceManager;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.tepth.remote.core.app.Control;

import java.util.ArrayList;

/**
 * Description:本地缓存工具类
 *
 * @author Hequn.Lee
 * @date 2018/11/8
 */

@SuppressWarnings("ALL")
public class ControlPreference {

    /**
     * 提示:
     * Activity.getPreferences(int mode)生成 Activity名.xml 用于Activity内部存储
     * PreferenceManager.getDefaultSharedPreferences(Context)生成 包名_preferences.xml
     * Context.getSharedPreferences(String name,int mode)生成name.xml
     */
    private static final SharedPreferences PREFERENCES =
            PreferenceManager.getDefaultSharedPreferences(Control.getApplicationContext());

    /**
     * 获取本地缓存工具
     *
     * @return 本地缓存工具
     */
    private static SharedPreferences getAppPreference() {
        return PREFERENCES;
    }

    /**
     * 清除本地缓存
     */
    public static void clearAppPreferences() {
        getAppPreference()
                .edit()
                .clear()
                .apply();
    }

    /**
     * 存储布尔型本地缓存
     *
     * @param key   键
     * @param value 值
     */
    public static void addCustomAppProfile(String key, boolean value) {
        getAppPreference()
                .edit()
                .putBoolean(key, value)
                .apply();
    }

    /**
     * 获取布尔型本地缓存
     *
     * @param key 键
     * @return 值
     */
    public static boolean getPreferenceBoolean(String key) {
        return getAppPreference()
                .getBoolean(key, false);
    }

    /**
     * 存储字符串型本地缓存
     *
     * @param key   键
     * @param value 值
     */
    public static void addCustomAppProfile(String key, String value) {
        getAppPreference()
                .edit()
                .putString(key, value)
                .apply();
    }

    /**
     * 获取字符串型本地缓存
     *
     * @param key 键
     * @return 值
     */
    public static String getPreferenceString(String key) {
        return getAppPreference().getString(key, "");
    }

    /**
     * 存储数值型本地缓存
     *
     * @param key   键
     * @param value 值
     */
    public static void addCustomAppProfile(String key, int value) {
        getAppPreference()
                .edit()
                .putInt(key, value)
                .apply();
    }

    /**
     * 获取数值型本地缓存
     *
     * @param key 键
     * @return 值
     */
    public static int getPreferenceInteger(String key) {
        return getAppPreference().getInt(key, 0);
    }

    /**
     * 存储对象型本地缓存
     *
     * @param key   键
     * @param value 值
     */
    public static void addCustomAppProfile(String key, Object value) {
        getAppPreference()
                .edit()
                .putString(key, JSON.toJSONString(value))
                .apply();
    }

    /**
     * 获取对象型本地缓存
     *
     * @param key 键
     * @return 对象
     */
    public static Object getPreferenceObject(String key) {
        return JSON.parse(getAppPreference().getString(key, ""));
    }

    /**
     * 存储对象集合型本地缓存
     *
     * @param key   键
     * @param value 值
     */
    public static void addCustomAppProfile(String key, ArrayList<Object> value) {
        getAppPreference()
                .edit()
                .putString(key, JSON.toJSONString(value))
                .apply();
    }

    /**
     * 获取对象集合型本地缓存
     *
     * @param key 键
     * @return 对象集合
     */
    public static JSONArray getPreferenceJSONArray(String key) {
        return JSON.parseArray(getAppPreference().getString(key, ""));
    }


}
